package com.woniu113.junk.commons.util;


import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;

import java.security.Key;
import java.util.Date;
import java.util.Map;

/**
 * 为了便于后续签发和校验jwt
 * 此util封装了生成jwt和校验jwt
 */
public class TokenUtil {
    //自定义的密钥(密钥只有长度要求)
    //HS256：即字节长度>=32
    private static String sect ="ksaasfdasdfadsfwfrasdfsadffcasijfasadfasfdlkfjlasjflksajfd";

    /**
     * 生成JWT令牌
     * @param body:载荷:保存在jwt中的数据
     * @param mil:过期时间
     * @return
     */
    //生成token
    //键值对包含用户信息
    //以分钟为单位的时间 代表jwt的有效时间
    public static String createToken(Map<String, Object> body, Integer mil) {
        Key key = Keys.hmacShaKeyFor(sect.getBytes());//将密钥转换为字节格式
        return Jwts.builder()
                .setClaims(body)//设置载荷
                .setExpiration(new Date(System.currentTimeMillis() + mil * 60 * 1000))//设置过期时间:系统当前的毫秒数+系统过期时间的毫秒数=>得到准确的过期时间
                .signWith(key)//设置密钥
                .compact();//生成jwt字符串
    }

    //解析token
    public static Claims parseToken(String token) throws Exception{
        Key key = Keys.hmacShaKeyFor(sect.getBytes());
        return Jwts.parserBuilder().setSigningKey(key)
                .build().parseClaimsJws(token).getBody();
    }
}
